/*
 * @Author: 杰编程 2306248989@qq.com
 * @Date: 2023-07-20 11:24:11
 * @LastEditors: 杰编程 2306248989@qq.com
 * @LastEditTime: 2023-07-20 22:46:10
 * @FilePath: /lesson16/shm/shmserver.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

#include "comm.hpp"

int main()
{
    // 服务端接受到客户端的开始信号好才开始读取共享内存中数据

    // 1. 以读取的方式打开客户端创建的命名管道文件
    int rfd = open(client_to_server.c_str(), O_RDONLY);
    if (rfd == -1)
    {
        cout << "errno:" << errno << ":" << strerror(errno) << endl;
        exit(6);
    }
    cout << "服务端以读的方式打开命名管道文件成功" << endl;
    // 2. 接受信息
    char buffer[128] = {0};
    int n = read(rfd, buffer, sizeof(buffer));
    if (n > 0)
    {
        if (strcmp(buffer, client_to_server.c_str()) == 0)
        {
            cout << "服务端接受到开始信号，开始读取共享内存的数据" << endl;
        }

        // 服务端开始访问共享内存中的数据
        init s(SERVER);
        char *start = s.GetStart();
        int n = 0;
        while (n < 30)
        {
            cout << start << endl;
            ++n;
            sleep(1);
        }
    }
    else if (n == 0)
    {
        cout << "client quit" << endl;
    }
    else
    {
        perror("read error:");
    }

    return 0;
}
